EventBridge のイベントパターンで AWS Health の一部イベント通知を抑止してみた

EventBridge のイベントパターンで AWS Health の一部イベント通知を抑止してみた

Clock Icon2023.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。ネクストモードのあゆです。

今回は EventBridge のイベントパターンで、比較演算子のanything-butを使って AWS Health の一部イベント通知を抑止してみたので、その方法をご紹介していきます。
「AWS Health のイベント通知をメールや Slack 等で監視したいけど、気にしなくていいものは通知を抑止したいな」、と一度は考えたことがある方々に刺さる内容だと思います。
また、AWS Health の一部イベント通知を抑止する以外にも応用できる場面があると考えていますので、最後まで見ていただけると幸いです。

EventBridge のイベントパターンについて

EventBridge で AWS Health などのイベントを通知したい場合は、イベントパターンでイベントに一致する内容を定義し Amazon SNS トピックといったターゲットを設定して通知させます。
ターゲットの設定方法は本記事では割愛し、EventBridge のイベントパターンについて触れていきます。
EventBridge では比較演算子を使用してイベントパターンを記述することができます。比較演算子について AWS 公式ドキュメントの EventBridge のホワイトペーパーより一部抜粋してご紹介いたします。

Comparison Example Rule syntax Supported by Pipes
And Location is "New York" and Day is "Monday" "Location": [ "New York" ], "Day": ["Monday"] Yes
Or PaymentType is "Credit" or "Debit" "PaymentType": [ "Credit", "Debit"] Yes
Or (multiple fields) Location is "New York", or Day is "Monday". "$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ] No
Not Weather is anything but "Raining" "Weather": [ { "anything-but": [ "Raining" ] } ] Yes

参考:Amazon EventBridge event patterns - Amazon EventBridge

上記の比較演算子を組み合わせることにより、1つの EventBridge ルールのイベントパターンで AWS Health の一部イベント通知を抑止することが可能となります。
具体的にどのようにイベントパターンを記述していくのか紹介していきます。

やってみる

抑止対象

今回は下記3点の AWS Health のイベント通知を抑止していきます。

  • AWS_VPN_REDUNDANCY_LOSS
  • AWS_CLOUDSHELL_PERSISTENCE_EXPIRING
  • AWS_DIRECTCONNECT_MAINTENANCE_SCHEDULED

※あくまで本記事用にピックアップしたイベント通知であり、抑止を推奨するものではないことにご注意ください。

イベントパターン

イベントパターンではanything-but の比較演算子を使用して下記のように記述します。

{
    "source": [
        "aws.health"
    ],
    "detail": {
        "eventTypeCode": 
        [
            {
                "anything-but":
                 [
                    "AWS_VPN_REDUNDANCY_LOSS",
                    "AWS_CLOUDSHELL_PERSISTENCE_EXPIRING",
                    "AWS_DIRECTCONNECT_MAINTENANCE_SCHEDULED"
                ]
            }
        ]
    }
}

上記のイベントパターンを下から解読していきます。
これはAWS_VPN_REDUNDANCY_LOSSAWS_CLOUDSHELL_PERSISTENCE_EXPIRINGAWS_DIRECTCONNECT_MAINTENANCE_SCHEDULED"以外"のeventTypeCodeの AWS Health イベントを通知してください、という内容となっています。

読み解くとなんてことないですが、頭の中にある設計をいざイベントパターンに書き込んでみると上手くいかず沼にハマることもあります。
そんなときはド・モルガンの法則を使っていきましょう。EventBridge のイベントパターンとド・モルガンの法則の考え方は非常に相性がいいです。
今回の内容をベン図を使って表すと以下の図のようになります。

図を描いているときに高校数学の授業を思い出して、懐かしい気持ちになりました。

動作確認

今回の動作確認では抑止したいサンプルイベントを使い、イベントパターンに 一致しない ことを確認します。
さらに通知したいサンプルイベントを使い、イベントパターンに 一致する ことを確認して動作確認を完了とします。

EventBridge ではサンプルイベントを使用して、イベントパターンのテストを実施することができます。
本記事ではカスタムで用意したサンプルイベントを利用しますが、AWS が提供しているサンプルイベントもありますので是非試してみてください。

マッチしないパターン:AWS_VPN_REDUNDANCY_LOSS

{
    "version": "0",
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "detail-type": "AWS Health Event",
    "source": "aws.health",
    "account": "xxxxxxxxxxxx",
    "time": "2023-03-24T00:00:00Z",
    "region": "ap-northeast-1",
    "resources": [
        "xxxxxxxx"
    ],
    "detail": {
        "eventArn": "arn:aws:health:ap-northeast-1::event/*",
        "eventTypeCode": "AWS_VPN_REDUNDANCY_LOSS",
        "eventTypeCategory": "accountNotification",
        "startTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "endTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "eventDescription": [
            {
                "language": "en_US",
                "latestDescription": "xxxx"
            }
        ]
    }
}

結果

イベントパターンに一致していない、つまり想定通りの動作を確認できました。
以降は14行目のeventTypeCodeを書き換えながら確認していきましょう。

マッチしないパターン:AWS_CLOUDSHELL_PERSISTENCE_EXPIRING

{
    "version": "0",
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "detail-type": "AWS Health Event",
    "source": "aws.health",
    "account": "xxxxxxxxxxxx",
    "time": "2023-03-24T00:00:00Z",
    "region": "ap-northeast-1",
    "resources": [
        "xxxxxxxx"
    ],
    "detail": {
        "eventArn": "arn:aws:health:ap-northeast-1::event/*",
        "eventTypeCode": "AWS_CLOUDSHELL_PERSISTENCE_EXPIRING",
        "eventTypeCategory": "accountNotification",
        "startTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "endTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "eventDescription": [
            {
                "language": "en_US",
                "latestDescription": "xxxx"
            }
        ]
    }
}

結果

マッチしないパターン:AWS_DIRECTCONNECT_MAINTENANCE_SCHEDULED

{
    "version": "0",
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "detail-type": "AWS Health Event",
    "source": "aws.health",
    "account": "xxxxxxxxxxxx",
    "time": "2023-03-24T00:00:00Z",
    "region": "ap-northeast-1",
    "resources": [
        "xxxxxxxx"
    ],
    "detail": {
        "eventArn": "arn:aws:health:ap-northeast-1::event/*",
        "eventTypeCode": "AWS_DIRECTCONNECT_MAINTENANCE_SCHEDULED",
        "eventTypeCategory": "accountNotification",
        "startTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "endTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "eventDescription": [
            {
                "language": "en_US",
                "latestDescription": "xxxx"
            }
        ]
    }
}

結果

マッチするパターン:AWS_VPN_SINGLE_TUNNEL_NOTIFICATION

{
    "version": "0",
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "detail-type": "AWS Health Event",
    "source": "aws.health",
    "account": "xxxxxxxxxxxx",
    "time": "2023-03-24T00:00:00Z",
    "region": "ap-northeast-1",
    "resources": [
        "xxxxxxxx"
    ],
    "detail": {
        "eventArn": "arn:aws:health:ap-northeast-1::event/*",
        "eventTypeCode": "AWS_VPN_SINGLE_TUNNEL_NOTIFICATION",
        "eventTypeCategory": "accountNotification",
        "startTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "endTime": "Fri, 24 Jan 2023 00:00:100 GMT",
        "eventDescription": [
            {
                "language": "en_US",
                "latestDescription": "xxxx"
            }
        ]
    }
}

結果

以上、すべてのパターンで想定通りの動作を確認することができました。

まとめ

比較演算子のanything-butを使った EventBridge のイベントパターンで、AWS Health の一部イベント通知を抑止する方法をご紹介いたしました。
イベント通知について監視運用の見直しを検討する際に、本記事の内容をベースに EventBridge のイベントパターンを活用して快適な監視運用ライフを送りましょう。

参考

ネクストモードについて

ネクストモード株式会社は東日本電信電話株式会社とクラスメソッド株式会社で設立したクラウドカンパニーです。「クラウドであたらしい働き方を」というメッセージを掲げ、さまざまなクラウド技術や製品を組み合わせて企業の働き方の当たり前を変えていくことを目指しています。クラウドやSaaSのご利用に関してお困りごとがあれば、ネクストモードまでぜひお問い合わせください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.